package cn.lcsjsxy.yxc.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet(value = "/servlet5")
public class ServletTest5 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收请求中的参数
        //根据参数名获取单个参数值
        String username=req.getParameter("username");
        System.out.println(username);

        String password=req.getParameter("userPwd");
        System.out.println(password);

        //根据参数名获得多个参数值
        String[] hobbies=req.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbies));

        //获取所有的参数名
        Enumeration<String> pnames=req.getParameterNames();
        while(pnames.hasMoreElements()){
            String pname=pnames.nextElement();
            String pvalue=req.getParameter(pname);
            String[] values=req.getParameterValues(pname);
            if (values.length>1){
                System.out.println(pname+"="+Arrays.toString(values));
            } else {
                System.out.println(pname+"="+values[0]);
            }
        }

        //获取所有参数的map集合，key=参数名，value=参数值
        Map<String,String[]> parameterMap=req.getParameterMap();
        Set<Map.Entry<String,String[]>> entrySet=parameterMap.entrySet();
        for (Map.Entry<String,String[]> entry:entrySet){
            String pname=entry.getKey();
            String[] values=entry.getValue();
            if (values.length>1){
                System.out.println(pname+"="+Arrays.toString(values));
            } else {
                System.out.println(pname+"="+values[0]);
            }
        }
        /*
        * 以上API专门用于获取key=value形式的参数，无论这些参数是在url后还是在请求体中
        * 请求
        *   请求行     方式      uri     http/1.1
        *   请求头
        *   请求体
        *
        * form 表单标签提交GET请求时，参数键值对形式在url后，不放在请求体里，GET方式的请求也是可以有请求体
        *
        * 获得请求体中的非键值对数据？    JSON串   文件
        * //获取一个从请求体中读取字符的字符输入流
        * BufferedReader reader = req.getReader();  JSON串
        * //获取一个从请求体中读取二进制数据字节的输入流
        * ServletInputStream inputStream=req.getInputStream();  文件
        * */
        System.out.println(req.getServletPath());

    }
}
